﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using EstacionDePoder.Codigo;
using BLLEP.Funcionalidad;
using System.Drawing;
using System.Net;
using System.IO;
using System.Web.Script.Serialization;

namespace EstacionDePoder.Cuentas
{
    public partial class Registrarse : FormGenerico
    {
        private bool ValidarDatos()
        {
            BLLUsuario bllUsuario = new BLLUsuario();
            bool resultado = true;
            blErroresComplejos.Items.Clear();

            if (!ValidarHumanidad())
            {
                blErroresComplejos.Items.Add("Usted no es humano ó no validó el captcha");
                resultado = false;
            }

            if (bllUsuario.TraerHabilitado(txtEMail.Text) != null)
            {
                blErroresComplejos.Items.Add("El e-mail proporcionado pertenece a otra cuenta");
                resultado = false;
            }
            if (txtEMail.Text.ToLower().Equals(txtEMailReferente.Text.ToLower()))
            {
                blErroresComplejos.Items.Add("El e-mail y el referente NO PUEDEN SER EL MISMO, no te hagas el vivo");
                resultado = false;
            }
            if (txtContrasena.Text.Length < 6)
            {
                blErroresComplejos.Items.Add("Contraseña mínimo de 6 caracteres");
                resultado = false;
            }

            SetearVisibilidad(pnlErroresComplejos, !resultado);

            return resultado;
        }

        private bool ValidarHumanidad()
        {
            try
            {
                string response = Request["g-recaptcha-response"];//Getting Response String Append to Post Method
                bool esHumano = false;
                //Request to Google Server
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create("https://www.google.com/recaptcha/api/siteverify?secret=6LcoXwoTAAAAAG1pONlpu91LmDdQxwx17KD0HQKk&response=" + response);

                //Google recaptcha Response
                using (WebResponse wResponse = req.GetResponse())
                {

                    using (StreamReader readStream = new StreamReader(wResponse.GetResponseStream()))
                    {
                        string jsonResponse = readStream.ReadToEnd();

                        JavaScriptSerializer js = new JavaScriptSerializer();
                        RespuestaGoogle data = js.Deserialize<RespuestaGoogle>(jsonResponse);// Deserialize Json

                        esHumano = Convert.ToBoolean(data.success);
                        return esHumano;
                    }
                }

            }
            catch (Exception ex)
            {
                return true;
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                SetearVisibilidad(pnlErroresComplejos, false);
            }
        }

        protected void btnCrearCuenta_Click(object sender, EventArgs e)
        {
            if (!ValidarDatos())
                return;
            try
            {
                BLLUsuario bllUsuario = new BLLUsuario();
                bllUsuario.CrearUsuario(txtEMail.Text, txtContrasena.Text, (txtEMailReferente.Text.Length == 0) ? null : txtEMailReferente.Text, Request.UserHostAddress);
                bllUsuario.GuardarCambios();
            }
            catch (BLLEPException ex)
            {
                blErroresComplejos.Items.Clear();
                blErroresComplejos.Items.Add(ex.Message);
                return;
            }
            

            try
            {
                Mailer mailer = new Mailer(HttpContext.Current);
                mailer.EnviarEmailActivacionCuenta(txtEMail.Text);
            }
            catch (Exception ex)
            {
            }

            EmailRegistrandose = txtEMail.Text;
            Response.Redirect("Registrando.aspx");
        }

        protected void txtEMail_TextChanged(object sender, EventArgs e)
        {
            BLLUsuario bllUsuario = new BLLUsuario();
            
            if (!revEmail.IsValid)
                return;

            if (bllUsuario.TraerHabilitado(txtEMail.Text) == null)
            {
                txtEMail.ForeColor = Color.Green;
                txtEMail.ToolTip = "Dirección de e-mail disponible";
            }
            else
            {
                txtEMail.ForeColor = Color.Red;
                txtEMail.ToolTip = "Está dirección de e-mail pertenece a otra cuenta";
            }
        }

        protected void txtEMailReferente_TextChanged(object sender, EventArgs e)
        {
            BLLUsuario bllUsuario = new BLLUsuario();
            

            if (txtEMail.Text.ToLower().Equals(txtEMailReferente.Text.ToLower()))
            {
                txtEMailReferente.ForeColor = Color.Red;
                txtEMailReferente.ToolTip = "No seas GIL, no te podés poner a vos mismo";
                return;
            }

            if (bllUsuario.TraerHabilitado(txtEMailReferente.Text) == null)
            {
                txtEMailReferente.ForeColor = Color.Red;
                txtEMailReferente.ToolTip = "No existe una cuenta registrada con el e-mail proporcionado";
            }
            else
            {
                txtEMailReferente.ForeColor = Color.Green;
                txtEMailReferente.ToolTip = "Excelenchi, ese será tu referente.";
            }
        }
    }
}